<?php
declare (strict_types = 1);

namespace app\controller;

use app\validate\CheckPassword;
use think\exception\DbException;
use think\exception\ValidateException;
use think\process\exception\Failed;
use think\Request;

class ChangePwd
{
    /**
     * @return \think\response\View
     * 跳转到修改页面，有修改密码与手机号
     */
    public function index()
    {
        //修改密码页面
        return view('index/changeShow');
    }


    /**
     * @return \think\response\View
     * 跳转到修改密码的页面
     */
    public function changePwdShow(){
//        跳转到修改密码页面
        return view('index/changePwd');
    }


    /**
     * @param Request $request
     * @return \think\response\Json
     * @throws DbException
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * 修改密码的功能
     */
    public function ChangePwd(Request $request){
//        判断是否登陆
        if(empty(cache('user_id'))){
            return fail('请先登陆');
        }
//        对前端的值进行验证
        try {
            validate(CheckPassword::class)->check($request->post());
        }catch (ValidateException $exception){
//            返回失败值
            return fail('',$exception->getMessage());
        }
//        接收前端的值
        $data=$request->post();
//        调用模型层进行判断原密码是否正确
        $userData=(new \app\model\User())->checkPassword($data);
//        判断原密码是否正确
        if(!$userData){
            return fail('','原密码不对，请重新输入');
        }
//        判断两次密码是否有误
        if($data['newPassword']!=$data['resNewPassword']){
            return fail('','两次密码输入有误,请重新输入');
        }
        try {
//        调用修改密码的方法
            $res=(new \app\model\User())->updatePwd($data);
//        判断是否修改成功
            if(!$res){
                return fail('','修改失败');
            }
            cache('user_id',null);
            return succeed('','修改成功');
        }catch (DbException $exception){
//            返回失败
            return fail('',$exception->getMessage());
        }
    }
}
